---@class GT.modifier BUff 魔法效果
---@field modifier Modifier buff
GT.modifier = class()

---@class modifier_data
---@field modifier Modifier buff


---@param data modifier_data
function GT.modifier:ctor(data)
    self.modifier=data.modifier
end


---@param modifier Modifier
---@return GT.modifier
function GT.modifier.obj(modifier)
    return new(GT.modifier, {modifier=modifier})
end

--- 增加buff最大层数
---@param attr_num UInt32 整数属性值
function GT.modifier:api_add_buff_max_layer(attr_num)
    self.modifier.api_add_buff_max_layer(attr_num)
end

--- 增加buff实例层数
---@param plus_layer Int64 整数属性值
function GT.modifier:api_add_buff_layer(plus_layer)
    self.modifier.api_add_buff_layer(plus_layer)
end

--- 增加buff的剩余持续时间
---@param residue_time Fixed 浮点数剩余时间
function GT.modifier:api_add_buff_residue_time(residue_time)
    self.modifier.api_add_buff_residue_time(residue_time)
end

--- 增加buff浮点属性效果
---@param attr_name Str 属性名称
---@param attr_num Fixed 浮点数属性值
function GT.modifier:api_add_float_shield(attr_name, attr_num)
    self.modifier.api_add_float_shield(attr_name, attr_num)
end

--- 增加循环周期事件的循环时间
---@param add_cycle_time Fixed 浮点数属性值
function GT.modifier:api_add_cycle_time(add_cycle_time)
    self.modifier.api_add_cycle_time(add_cycle_time)
end

--- 阻止即将获得的魔法效果
---@return Bool
function GT.modifier:api_prevent_will_modifier()
    return self.modifier.api_prevent_will_modifier()
end

--- 删除魔法效果
---@return Bool
function GT.modifier:api_remove()
    return self.modifier.api_remove()
end

--- 获取效果携带者
---@return GT.unit
function GT.modifier:api_get_owner()
    return GT.unit.obj(self.modifier.api_get_owner()) 
end

--- 获取效果释放者
---@return Unit
function GT.modifier:api_get_releaser()
    return GT.unit.obj(self.modifier.api_get_releaser())  
end

--- 获取剩余持续时间
---@return float
function GT.modifier:api_get_residue_time()
    return self.modifier.api_get_residue_time():float()
end

--- 获取已经持续时间
---@return Fixed
function GT.modifier:api_get_passed_time()
    return self.modifier.api_get_passed_time():float()
end

--- 获取buff整数属性效果
---@param attr_name Str 属性名称
---@return UInt32
function GT.modifier:api_get_int_attr(attr_name)
    return self.modifier.api_get_int_attr(attr_name)
end

--- 获取buff类别
---@param attr_name Str 属性名称
---@return ModifierType
function GT.modifier:api_get_modifier_type(attr_name)
    return self.modifier.api_get_modifier_type(attr_name)
end

--- 获取buff影响类型
---@return ModifierEffectType
function GT.modifier:api_get_modifier_effect_type()
    return self.modifier.api_get_modifier_effect_type("modifier_effect")
end

--- 获取buff浮点属性效果
---@param attr_name Str 属性名称
---@return Fixed
function GT.modifier:api_get_float_attr(attr_name)
    return self.modifier.api_get_float_attr(attr_name)
end

--- 获取buff循环周期
---@return Fixed
function GT.modifier:api_get_cycle_time()
    return self.modifier.api_get_cycle_time()
end

--- 获取光环魔法效果的子光环类型
---@return ModifierKey
function GT.modifier:api_get_sub_halo_modifier_key()
    return self.modifier.api_get_sub_halo_modifier_key()
end

--- 获取子光环的光环实体
---@return ModifierEntity
function GT.modifier:api_get_halo_modifier_instance()
    return self.modifier.api_get_halo_modifier_instance()
end

--- 获取光环的范围
---@return Float
function GT.modifier:api_get_halo_inf_rng()
    return self.modifier.api_get_halo_inf_rng()
end

--- 获取即将获得魔法效果的单位
---@return GT.unit
function GT.modifier:api_get_will_modifier_unit()
    return GT.unit.obj(self.modifier.api_get_will_modifier_unit()) 
end

--- 获取即将获得魔法效果类型
---@return ModifierKey
function GT.modifier:api_get_will_modifier_key()
    return self.modifier.api_get_will_modifier_key()
end

--- 获取buff的唯一id
---@return UInt32
function GT.modifier:api_get_modifier_unique_id()
    return self.modifier.api_get_modifier_unique_id()
end

--- 获取buff的类型key
---@return ModifierKey
function GT.modifier:api_get_modifier_key()
    return self.modifier.api_get_modifier_key()
end

--- 获取buff字符属性效果
---@param attr_name Str 属性名称
---@return Str
function GT.modifier:api_get_str_attr(attr_name)
    return self.modifier.api_get_str_attr(attr_name)
end

---@return string name 名字
---获取魔法效果对象的名称
function GT.modifier:get_name()
    return self:api_get_str_attr("name_str")
end

---@return string description 描述
---获取魔法效果对象的描述
function GT.modifier:get_description()
    return self:api_get_str_attr("description")
end



--- 获取buff图标是否可见
---@return Bool
function GT.modifier:api_get_icon_is_visible()
    return self.modifier.api_get_icon_is_visible()
end

--- 获取魔法效果等级
---@return Int64
function GT.modifier:api_get_modifier_level()
    return self.modifier.api_get_modifier_level()
end

--- 获取魔法效果的堆叠层数
---@return Int64
function GT.modifier:api_get_modifier_layer()
    return self.modifier.api_get_modifier_layer()
end

--- 设置buff整数属性效果
---@param attr_num UInt32 整数属性值
function GT.modifier:api_set_buff_max_layer(attr_num)
    self.modifier.api_set_buff_max_layer(attr_num)
end

--- 设置buff实例层数
---@param attr_num UInt32 整数属性值
function GT.modifier:api_set_buff_layer(attr_num)
    self.modifier.api_set_buff_layer(attr_num)
end

--- 设置buff的剩余持续时间
---@param residue_time Fixed 浮点数剩余时间
function GT.modifier:api_set_buff_residue_time(residue_time)
    self.modifier.api_set_buff_residue_time(residue_time)
end

--- 设置buff浮点属性效果
---@param attr_name Str 属性名称
---@param attr_num Fixed 浮点数属性值
function GT.modifier:api_set_float_shield(attr_name, attr_num)
    self.modifier.api_set_float_shield(attr_name, attr_num)
end

--- 设置循环周期事件
---@param new_cycle_time Fixed 浮点数属性值
function GT.modifier:api_set_cycle_time(new_cycle_time)
    self.modifier.api_set_cycle_time(new_cycle_time)
end

--- 设置魔法效果的持续时间
---@param residue_time Fixed 非负数实数值
function GT.modifier:api_set_duration(residue_time)
    self.modifier.api_set_duration(residue_time)
end

--- 设置buff的字符串属性
---@param name Str 属性名称
---@param value Str 属性值
function GT.modifier:api_set_buff_str_attr(name, value)
    self.modifier.api_set_buff_str_attr(name, value)
end

--- 对魔法效果所属单位的所属玩家关系播放音乐
---@param camp_target RoleRelation 玩家关系
---@param sid AudioKey 乐曲编号
---@param loop Bool 是否循环
function GT.modifier:api_play_sound_by_mod_for_role_relation(camp_target, sid, loop)
    self.modifier.api_play_sound_by_mod_for_role_relation(camp_target, sid, loop)
end

--- 返回指定魔法效果类型的描述
---@return Str
function GT.modifier:desc()
   return game_api.get_modifier_desc_by_type(self:api_get_modifier_key())
end

--- 返回指定魔法效果类型的名称
---@return Str
function GT.modifier:name()
    return game_api.get_modifier_name_by_type(self:api_get_modifier_key())
end


--- 获取魔法效果icon图标的图片id
---@param key ModifierKey 魔法效果编号
---@return Int32
function GT.modifier.get_icon_id_by_buff_type(key)
    return game_api.get_icon_id_by_buff_type(key)
end

--- 获取魔法效果icon图标的图片id
---@return Int32
function GT.modifier:icon()
    return game_api.get_icon_id_by_buff_type(self:api_get_modifier_key())
end

--- 获取魔法效果类型图标的可见性
---@param key ModifierKey 魔法效果编号
---@return Bool
function GT.modifier.is_show_on_ui_by_buff_type(key)
    return game_api.get_icon_id_by_buff_type(key)
end

--- 效果实体是否存在
---@param modifier GT.modifier 效果实体
---@return Bool
function GT.modifier.modifier_is_exist(modifier)
    return game_api.modifier_is_exist(modifier.modifier)
end




---获得关联技能
---@return GT.ability
function GT.modifier:get_ability()
    return GT.ability.obj(globalapi.get_related_ability(self.modifier))
end